/**
 * 
 */
package com.wilmar.process.core.services.api;

import java.util.List;

import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.task.Task;

import com.wilmar.process.entity.InstanceOperateOpinion;
import com.wilmar.process.entity.ProcessLog;
import com.wilmar.process.entity.User;
import com.wilmar.process.entity.query.ProcessLogQueryObject;
import com.wilmar.process.entity.vo.ProcessLogVO;
import com.wilmar.process.enumerate.EnumProcessLogLevel;
import com.wilmar.process.exception.ObjectNotFoundException;

/**
 * 工作流子系统日志服务接口
 * 
 * @author MaKuBEX E-mail:makubexnet@gmail.com
 * @version 1.0.0 at Aug 3, 2009 9:43:24 AM
 * 
 */
public interface ISystemProcessLogService extends
		IBaseService<ProcessLogVO, ProcessLog> {
	/**
	 * 获取日志详细信息
	 * 
	 * @param id
	 *            日志编号
	 * @return 日志实体
	 */
	public ProcessLog getDetail(Long id);

	/**
	 * 根据executionid获取对应的操作日志
	 * 
	 * @param executionId
	 *            运行时编号
	 * @return 操作日志
	 */
	public ProcessLog getOperateLogByExecutionId(String executionId)
			throws ObjectNotFoundException;

	/**
	 * 获取流程实例对应的所有日志信息
	 * 
	 * @param processInstanceId
	 *            流程实例编号
	 * @param logLevel
	 *            日志最小等级
	 * @return 流程日志列表
	 */
	public List<ProcessLog> getListByProcessInstanceId(
			String[] processInstanceId, EnumProcessLogLevel logLevel);

	/**
	 * 获取当前用户所有启动的日志信息（即获取用户提报的流程实例列表）
	 * 
	 * @param user
	 *            用户
	 * @param prototype
	 *            分页信息
	 * @return 用户提报的流程实例列表
	 */
	public List<ProcessLog> getListOnlyStartRecordByUser(User user,
			ProcessLogQueryObject prototype);

	/**
	 * 根据流程实例编号获取对应的流程实例启动日志信息
	 * 
	 * @param processInstanceId
	 *            流程实例编号
	 * @return 流程实例启动日志信息
	 * @throws ObjectNotFoundException
	 *             如果没有找到对应的记录
	 */
	public ProcessLog getDetailOnlyStartRecordByProcessInstanceId(
			String processInstanceId) throws ObjectNotFoundException;

	/**
	 * 记录一行处理日志
	 * 
	 * @param processInstanceId
	 *            流程实例编号
	 * @param processDefinitionName
	 *            流程定义名称
	 * @param taskInstance
	 *            任务实例
	 * @param operator
	 *            处理人
	 * @param opinion
	 *            处理意见
	 * @param outCome
	 *            处理人选择的处理流向
	 */
	public void saveOperateLog(String processInstanceId,
			String processDefinitionName, Task taskInstance, User operator,
			InstanceOperateOpinion opinion, String outCome);

	/**
	 * 保存一行日志
	 * 
	 * @param aLog
	 *            日志实体
	 */
	public void saveProcessLog(ProcessLog aLog);

	/**
	 * 记录一行启动日志
	 * 
	 * @param processDefinition
	 *            流程定义
	 * @param processStartNodeName
	 *            流程起始节点名称
	 * @param processInstance
	 *            流程实例
	 * @param starter
	 *            流程启动人
	 */
	public void saveStartLog(ProcessDefinition processDefinition,
			String processStartNodeName, ProcessInstance processInstance,
			User starter);

	/**
	 * 获取当前用户所有操作过的日志信息（即获取用户处理过的任务列表）
	 * 
	 * @param prototype
	 *            查询信息包括对于的用户
	 * @return 用户处理过的日志信息列表
	 */
	public List<ProcessLog> getListRecordByQueryObject(
			ProcessLogQueryObject prototype);

}
